iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
AI & Data

AI-ction!我的超級瑪莉歐闖關歷險記:用自動化破關,收集時間金幣系列 第 27

Day 27:挑戰日誌 —— ChatBot的啟航之鑰

  • 分享至 

  • xImage
  •  

經過昨天的挑戰,我們的 ChatBot 開始能「記住對話、理解情緒、承接上下文」,接下來的挑戰是:把 ChatBot 帶到對外聊天介面,升級成一個完整的服務化系統。

在達成這個目標之前,首先得將 ChatBot 封裝成可對外呼叫的 REST API,才能讓外部網頁取得鑰匙順利對話。

這一步至關重要!
像是我們前幾天卡在 n8n 無法呼叫本地端 Python 的問題,在今天學會打造 API 之後,也能順利克服。

Pipeline 封裝:讓每個步驟有章可循

目前的 ChatBot 已經能做到:
檢索相關資料 → 生成友善回答 → 分析情緒 → 更新趨勢 → 記錄對話歷史。

這些步驟像是一組拼圖,今天的任務就是把它們封裝成一條完整的流水線,讓任何人丟一個問題就能得到智慧回答。

我們把 ChatBot 現有功能拆解成def積木,組成完整 pipeline 流水線:

# Step 1: RAG 檢索
docs = retrieve(query)
# Step 2: 生成 ChatBot 回覆
answer = generate_answer(query, docs, conversation_history)
# Step 3: 情緒分析
emotion_label, score = analyze_emotion(answer)
# Step 4: 更新趨勢統計
trend = log_trend(query, emotion_label)
# Step 5: 更新對話記錄
conversation_history.append((query, answer))

每個模組都是一個獨立的小齒輪,組合起來就是強大的智慧機器。

同時,我們導入狀態維持(stateful)的概念,讓 ChatBot 能記得前一輪的對話脈絡,從一次性問答進化成連貫多輪對話。

REST API 設計:打開通往世界的大門

使用 FastAPI 封裝 pipeline,建立 /chat 端點,接受使用者的 POST 提問。

app = FastAPI()

# --- FastAPI /chat endpoint ---
@app.post("/chat", response_model=ChatResponse)
def chat_endpoint(req: ChatRequest):

這裡有個關鍵:我們導入 Pydantic 模型,來定義資料格式,確保每次回傳結構一致:

  • answer:ChatBot 的回答
  • emotion:情緒標籤與信心值
  • trend:情緒趨勢統計
  • source:引用資料來源
  • metadata:附加資訊

無論前端是 網頁、LINE 還是 Streamlit,都能直接呼叫這個 API,不用動後端程式碼。

服務化:Colab + ngrok,讓全世界都能測試

我們在 Colab 上啟動 FastAPI,透過 ngrok 暴露本地服務,外部也能進行互動測試。搭配 FastAPI 自帶的 /docs ,自動生成 Swagger UI 測試介面,開發者可以直接在瀏覽器輸入問題、觀察完整回應。

nest_asyncio.apply()  # 允許在 Colab event loop 中執行 uvicorn

# 建立 ngrok tunnel
!ngrok authtoken ""   # 在""內填入認證金鑰
tunnel = ngrok.connect(8000)
public_url = tunnel.public_url

# 非阻塞啟動 uvicorn
def run_api():
    uvicorn.run(app, host="0.0.0.0", port=8000)

threading.Thread(target=run_api, daemon=True).start()
print("API 已啟動,可透過 POST /chat 呼叫 ChatBot")

Swagger UI 測試介面可以清楚地確認資料結構以及呼叫狀態:成功回傳 200 狀態碼。

https://ithelp.ithome.com.tw/upload/images/20251011/201788124g9rmTTxs5.png

這標誌著 ChatBot 正式進入 服務化階段:不再是單機原型,而是可以被其他應用呼叫的智慧服務。

下一步的想像

今天,我們為 ChatBot 打開了 REST API 的大門,讓它正式啟航。

明天的挑戰將是:
建立一個互動式的前端聊天介面,讓使用者能像與真人對話一樣,直接與 ChatBot 互動。


上一篇
Day 26:挑戰日誌 —— ChatBot的智慧航線
下一篇
Day 28:挑戰日誌 —— ChatBot的服務之翼
系列文
AI-ction!我的超級瑪莉歐闖關歷險記:用自動化破關,收集時間金幣30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言